package com.sai.transacciones;

import com.sai.clases.Alumno;
import com.sai.clases.Profesor;
import com.sai.clases.Usuario;
import com.sai.conexion.PoolConexion;
import com.sai.sql.SqlUsuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class TUsuario {
    public static Alumno ValidarLoginAlumno(Usuario usuario) {
        Alumno alumno = new Alumno();
        Connection conex = PoolConexion.getInstance().getConexion();
        try {
            PreparedStatement stm = null;
            ResultSet rs = null;
            stm = conex.prepareStatement(SqlUsuario.SELECT_1);
            stm.setString(1, usuario.getMatricula());
            stm.setString(2, usuario.getPassword());
            rs = stm.executeQuery();

            if(rs.next()){
                alumno.setIdAlumno(rs.getInt(1));
                alumno.setNombre(rs.getString(2));
                alumno.setApellidoP(rs.getString(3));
                alumno.setMatricula(rs.getString(4));
            } else {
                alumno = null;
            }
        } catch (Exception ex) {
            System.out.println("Error: " + ex);
        } finally {
            PoolConexion.getInstance().cerrarConexion(conex);
        }
        return alumno;
    }
    
    public static Profesor ValidarLoginProfesor(Usuario usuario) {
        Profesor profesor = new Profesor();
        Connection conex = PoolConexion.getInstance().getConexion();
        try {
            PreparedStatement stm = null;
            ResultSet rs = null;
            stm = conex.prepareStatement(SqlUsuario.SELECT_2);
            stm.setString(1, usuario.getMatricula());
            stm.setString(2, usuario.getPassword());
            rs = stm.executeQuery();

            if(rs.next()){
                profesor.setIdProfesor(rs.getInt(1));
                profesor.setNombre(rs.getString(2));
                profesor.setApellidoP(rs.getString(3));
                profesor.setMatricula(rs.getString(4));
                profesor.setTipo(rs.getString(5));
            } else {
                profesor = null;
            }
        } catch (Exception ex) {
            System.out.println("Error: " + ex);
        } finally {
            PoolConexion.getInstance().cerrarConexion(conex);
        }
        return profesor;
    }
    
    public static String RegistrarContraseña(Usuario usuario){
        Connection conex = (Connection) PoolConexion.getInstance().getConexion();
        String resp = "null";

        try{
            PoolConexion.getInstance().beginTransaction(conex);
            PreparedStatement stm = null;
            ResultSet rs = null;
            
            stm = conex.prepareStatement(SqlUsuario.SELECT_MALUMNO);
            stm.setString(1, usuario.getMatricula());
            rs = stm.executeQuery();
            
            if(rs.next()){
                if(rs.getString(1) == null){
                    stm = null;
                    stm = conex.prepareStatement(SqlUsuario.UPDATE_ALUMNO);
                    stm.setString(1, usuario.getPassword());
                    stm.setString(2, usuario.getMatricula());
                    stm.executeUpdate();
                    resp = "OK";
                    PoolConexion.getInstance().commit(conex);
                    PoolConexion.getInstance().endTransaction(conex);
                } else {
                    resp = "La matricula digitada ya contiene una contraseña.";
                }
            } else {
                stm = null;
                rs = null;
                stm = conex.prepareStatement(SqlUsuario.SELECT_MPROFESOR);
                stm.setString(1, usuario.getMatricula());
                rs = stm.executeQuery();

                if(rs.next()){
                    if(rs.getString(1) == null){
                        stm = null;
                        stm = conex.prepareStatement(SqlUsuario.UPDATE_PROFESOR);
                        stm.setString(1, usuario.getPassword());
                        stm.setString(2, usuario.getMatricula());
                        stm.executeUpdate();
                        resp = "OK";
                        PoolConexion.getInstance().commit(conex);
                        PoolConexion.getInstance().endTransaction(conex);
                    } else {
                        resp = "La matricula digitada ya contiene una contraseña.";
                    }
                }
            }
        } catch (Exception ex) {
            System.out.println("Error: " + ex);
        } finally {
            PoolConexion.getInstance().cerrarConexion(conex);
        }
        return resp;
    }
}
